const url = require('url')
const qs = require('querystring')

function Router() {
  // 路由表
  this.routes = []
}

Router.prototype.add = function (path, method, handler) {
  this.routes.push({
    path,
    method,
    handler
  })
}

// 中间件
Router.prototype.handlerPostData = function (req, res, route) {
  // post提交可能会有很多的数据，nodejs会异步进行处理  data end
  let postData = []
  // 开始接受数据
  req.on('data', chunk => {
    postData.push(chunk)
  })
  // 数据接受完毕
  req.on('end', () => {
    let body = qs.parse(Buffer.concat(postData).toString())
    // 自定义给req添另一个属性body，里面存储 post提交过来的数据
    req.body = body
    route.handler(req, res)
  })
}

Router.prototype.matchRoute = function (req, res, done) {
  let { pathname, query } = url.parse(req.url, true)
  // 自定义req添加一个query属性，用于接受get请求数据
  req.query = query
  let method = req.method.toLowerCase()

  let route = this.routes.find(route => {
    if (route.method == method && route.path == pathname) {
      return route
    }
  })
  if (route) {
    if (method === 'post') {
      this.handlerPostData(req, res, route)
    } else {
      route.handler(req, res)
    }
    return;
  }
  // 如果你没有一个匹配成功的，就可以调用此方法
  done()
}


module.exports = Router